'''
1.公交站点服务线路图
'''
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType

from sqlalchemy import create_engine
import pandas as pd

# 连接到MySQL数据库
cnx = create_engine('mysql+mysqlconnector://root:123456@localhost/bus_view')
# 从数据库中读取数据
query = "SELECT station_name,longitude, latitude,count FROM station_details ORDER BY count desc LIMIT 30 "
df = pd.read_sql(query, cnx)
station_names_list = df['station_name'].tolist()
station_count = df['count'].tolist()
print("开始绘制公交站点服务线路图...")
# 1绘图: 柱形图
bar1 = (
    # 主题配置
    Bar(opts.InitOpts(theme=ThemeType.DARK, height="300px", width="400px", chart_id='bar1',
                      bg_color="rgba(16, 12, 42,0.8)"))
    .set_global_opts(
        yaxis_opts=opts.AxisOpts(
            interval=1  # y轴刻度间隔
        ),

    )
    .add_xaxis(station_names_list)
    .add_yaxis("数量", station_count)

    # 全局配置项
    .set_global_opts(
        # 标题配置项
        title_opts=opts.TitleOpts(
            title='站点服务线路总计',
            subtitle='Site service line total',
            title_textstyle_opts=opts.TextStyleOpts(
                font_size=15,  # 标题的字体大小
                font_family='微软雅黑'
            ),
            pos_left='center',
            # 位置

            # pos_left = '100', #靠左
            pos_top='10px',  # 靠上
            # padding=10,#内边距
            # item_gap= 5,#主标题于副标题之间的间距
        ),
        # datazoom_opts组件配置
        datazoom_opts=opts.DataZoomOpts(
            # pos_top='50%',
            # pos_right='50%',
            # is_show=True, #是否显示组件
            # type_='slider', #组件的类型,slider,inside显示和不显示
            is_realtime=True,  # 拖动时是否实时更新图表
            range_start=0,  # 数据窗口的起始百分比
            range_end=30,  # 数据窗口的结束百分比
            orient='horizontal',  # horizontal或vertical 组件水平或者垂直
            is_zoom_lock=False,  # 是否锁定缩放
        ),

        #     图例配置项
        legend_opts=opts.LegendOpts(
            # 图例类型: plain普通图例, scroll:可以滚动翻页的图例,用于图例较多的情况
            type_='plain',
            is_show=False,
            pos_left='20%',
            orient='horizontal',  # 图例垂直或水平

            # 选择模式
            # True :开启图例点击(默认)
            # False:关闭图例点击
            # single:单选
            # multiple:多选
            selected_mode='True',  # 默认,也可以不用写
        )
    )
)
# render:渲染，渲染成html文件，默认为render.html
bar1.render("1.公交站点服务线路图.html")
